home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / RTVBE210.ZIP / DPMI.C < prev    next >
C/C++ Source or Header  |  1997-01-06  |  2KB  |  105 lines

  1. ;/*************************************************************************
  2. ; *
  3. ; *     File        : DPMI.C
  4. ; *
  5. ; *     Description : DPMI Functions
  6. ; *
  7. ; *     Portability : PC / GNU
  8. ; *
  9. ; *
  10. ; *     Copyright (C) 1995,97 RealTech
  11. ; *
  12. ; ************************************************************************/
  13. #include <dos.h>
  14. #include <string.h>
  15. #include "_standar.h"
  16. #ifdef __WATCOM__
  17.   #include <i86.h>
  18.   #include "_wdpmi.h"
  19. #else
  20.   #include "dpmi.h"
  21. #endif
  22.  
  23. #include "_dpmi.h"
  24.  
  25. PM_DPMIInfo Dps;
  26. PM_Buffer PMB={4096,0,0,0,0};
  27. /*------------------------------------------------------------------------
  28. *
  29. * PROTOTYPE  : void RM_Free(void)
  30. *
  31. * DESCRIPTION :
  32. *
  33. */
  34. void RM_Free(void)
  35. {
  36.     __dpmi_free_dos_memory(PMB.sel);
  37.     return;
  38. }
  39. /*------------------------------------------------------------------------
  40. *
  41. * PROTOTYPE  :
  42. *
  43. * DESCRIPTION :
  44. *
  45. */
  46. void RM_Initialize(void)
  47. {
  48.     if (PMB.sel==0)
  49.     {
  50.       __dpmi_allocate_dos_memory(PMB.len,(int*)(&PMB.sel));
  51.       PMB.rseg = __tb;
  52.     }
  53.     return;
  54. }
  55. /*------------------------------------------------------------------------
  56. *
  57. * PROTOTYPE  : void PM_callESDI(__dpmi_regs *regs,void *buffer,int size)
  58. *
  59. * DESCRIPTION : Emule l'interruption 0x10 en mode protégé
  60. *
  61. */
  62. void PM_callES(uchar Inte,__dpmi_regs *regs,void *buffer,int size)
  63. {
  64.     if (PMB.sel==0) RM_Initialize();
  65.     regs->x.es = PMB.rseg;
  66.     PM_memcpyfn(PMB.sel,0,buffer,size);
  67.     __dpmi_int(Inte,regs);
  68.     PM_memcpynf(buffer,PMB.sel,0,size);
  69.     return;
  70. }
  71.  
  72. /*------------------------------------------------------------------------
  73. *
  74. * PROTOTYPE  : void PM_PM_DPMIInfo(PM_DPMIInfo *Dps)
  75. *
  76. * DESCRIPTION : DPMI informations
  77. *
  78. */
  79.  
  80. void PM_specification(PM_DPMIInfo *Dps)
  81. {
  82.     __dpmi_version_ret ret;
  83.     __dpmi_get_version(&ret);
  84.     Dps->minor    =  ret.minor;
  85.     Dps->major    =  ret.major;
  86.     Dps->realmode =  ret.flags & 1;
  87.     Dps->paging   = (ret.flags& 2)!=0;
  88.     Dps->cpu      =  ret.cpu;
  89.     return;
  90. }
  91. /*------------------------------------------------------------------------
  92. *
  93. * PROTOTYPE  :
  94. *
  95. * DESCRIPTION :
  96. *
  97. */
  98.  
  99. ulong PM_memory_left(void)
  100. {
  101.     __dpmi_free_mem_info MemInfo;
  102.     __dpmi_get_free_memory_information(&MemInfo);
  103.     return MemInfo.largest_available_free_block_in_bytes;
  104. }
  105.